<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>练习1</title>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>

    <link rel="stylesheet" href="../style.css">
</head>

<body>
    <!-- 新增加一项是否选中功能，总价变为选中商品的总价 -->
    <div id='app' v-cloak>
        <template v-if='list.length'>
            <table>
                <thead>
                    <tr>
                        <th>全选  <input type="checkbox"  id="All" @click='checkAll'  v-model="selectArr.length===list.length" ></th>
                        <th>商品名称</th>
                        <th>商品单价</th>
                        <th>购买数量</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    <tr v-for="(item,index) in list">
                        <td> <input type="checkbox" name="" id=""  :value='index' v-model="selectArr" ></td>
                        <td>{{item.name}}</td>
                        <td>{{item.price}}</td>
                        <td>
                            <button @click='handleReduce(index)' :disabled="item.count===1">-</button>
                            {{item.count}}
                            <button @click='handleAdd(index)'>+</button>
                        </td>
                        <td>
                            <button @click='handleRemove(index)'>移除</button>
                        </td>
                    </tr>
                </tbody>
            </table>
            <div>总价:￥{{totalPrice}}</div>
        </template>
        <div v-else>购物车为空</div>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                // 一个空的数组 ，用于存放选中的商品
                selectArr: [],
                // 商品的数组
                list: [{
                    id: 1,
                    name: 'iPhone 7',
                    price: 6188,
                    count: 1
                }, {
                    id: 2,
                    name: 'iPad Pro',
                    price: 5888,
                    count: 1
                }, {
                    id: 3,
                    name: 'MacBook Pro',
                    price: 21488,
                    count: 1
                }, ]
            },
            computed: {
                // 计算商品的商品价格
                totalPrice: function() {
                    var _this = this;
                    var total = 0;
                    if (_this.selectArr.length === _this.list.length) {
                        console.log(_this.selectArr.length)
                        for (var i = 0; i < this.list.length; i++) {
                            var item = this.list[i];
                            total += item.price * item.count;
                        };
                        // 使用正则表达式匹配钱的千位分隔符 
                        // \B 匹配非字母和数字边界 \b 匹配字母或数字边界
                        // "g"标志表示正则表达式使用的global（全局）的状态 全局匹配
                        return total.toString().replace(/\B(?=(\d{3})+$)/g, ',');
                    } else if (_this.selectArr.length != 0 && _this.selectArr.length != _this.list.length) {
                        for (var i = 0; i < this.selectArr.length; i++) {
                            var item = this.selectArr[i];
                            var it = this.list[item]
                            total += it.price * it.count;
                            console.log(it)
                        }
                        return total.toString().replace(/\B(?=(\d{3})+$)/g, ',');
                    } else {
                        return total
                    }

                }
            },
            methods: {
                // 全部选中
                checkAll: function(event) {
                    var _this = this;
                    _this.selectArr = [];
                    if (event.currentTarget.checked) {
                        _this.list.forEach((item, index) => {
                            _this.selectArr.push(index)
                        });
                    }
                    console.log(_this.selectArr)
                },
                // 减少商品数量
                handleReduce: function(index) {
                    if (this.list[index].count === 1) return;
                    this.list[index].count--;
                },
                // 添加商品数量
                handleAdd: function(index) {
                    this.list[index].count++;
                },
                // 移除商品
                handleRemove: function(index) {
                    this.list.splice(index, 1);

                }

            }
        })
    </script>
</body>

</html>